<?php
App::uses('ProdutosController', 'Controller');

/**
 * TestProdutosController *
 */
class TestProdutosController extends ProdutosController {
/**
 * Auto render
 *
 * @var boolean
 */
	public $autoRender = false;


	public function redirect($url, $status = null, $exit = true) {
		$this->redirectUrl = $url;
	}
}

/**
 * ProdutosController Test Case
 *
 */
class ProdutosControllerTestCase extends ControllerTestCase {
/**
 * Fixtures
 *
 * @var array
 */
	public $fixtures = array('app.produto', 'app.empresa', 'app.tipos_produto', 'app.usuario');

/**
 * setUp method
 *
 * @return void
 */
	public function setUp() {
		parent::setUp();
		$this->Produtos = new TestProdutosController();
		$this->Usuario = ClassRegistry::init('Usuario');
		$this->Produtos->constructClasses();
		$this->Produtos->Session->initialize($this->Produtos);
		$this->Produtos->Auth->initialize($this->Produtos);
		$usuario = $this->Usuario->find('first', array('conditions'=>array('id'=>1), 'recursive'=>-1));
		$this->Produtos->Auth->login($usuario['Usuario']);
	}

/**
 * tearDown method
 *
 * @return void
 */
	public function tearDown() {
		unset($this->Produtos);

		parent::tearDown();
	}


	public function testIndex() {
		$result = $this->testAction('/produtos/index');
		debug($result);
	}	
	
	public function testAddErrado() {
		$data = array(
			'Produto'=>array(
				'empresa_id'=>1,
				'tipos_produto_id'=>2,
				'descricao'=>null,
				'numero_votos'=>1,
				'media_votos'=>1
			)
		);
		$result = $this->testAction('/produtos/add', array('data'=>$data));
		debug($result);
	}
	
	public function testAddCerto() {
		$data = array(
			'Produto'=>array(
				'empresa_id'=>1,
				'tipos_produto_id'=>2,
				'descricao'=>"Olá amigos",
				'numero_votos'=>1,
				'media_votos'=>1
			)
		);
		$result = $this->testAction('/produtos/add', array('data'=>$data));
		debug($result);
	}

//TODO Apagar isso se não usar
//	public function testEditVazio() {
//		$this->setExpectedException('NotFoundException');
//		$result = $this->testAction('/produtos/edit');
//		debug($result);
//	}
	
//	public function testEditCarregaDados() {
//		$result = $this->testAction('/produtos/edit/1', array('method'=>'get'));
//		debug($result);
//	}
	
	public function testEditSalvaErro(){
		$data = array(
			'Produto'=>array(
				'id'=>1,
				'descricao'=>null
			)
		);
		$result = $this->testAction('produtos/edit/1', array('data'=>$data));
		debug($result);
	}
	
	public function testEditSalvaCerto(){
		$data = array(
			'Produto'=>array(
				'id'=>1,
				'descricao'=>"Como vai parcerão!?"
			)
		);
		$result = $this->testAction('produtos/edit/1', array('data'=>$data));
		debug($result);
	}

	public function testDeleteNotPost() {
		$this->setExpectedException('MethodNotAllowedException');
		$result = $this->testAction('/produtos/delete/1', array('method'=>'get'));
		debug($result);
	}
	
	public function testDeleteNaoExiste() {
		$this->setExpectedException('NotFoundException');
		$result = $this->testAction('/produtos/delete/0');
		debug($result);
	}
	
	public function testDeleteCerto() {
		$result = $this->testAction('/produtos/delete/1');
		debug($result);
	}
	
	public function testVerErroVazio(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/produtos/ver');
	}
	
	public function testVerErroIdVazio(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/produtos/ver/string-link');
	}
	
	public function testVerErroLinkVazio(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/produtos/ver/1');
	}
	
	public function testVerErroMatch(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/produtos/ver/1/string-errada');
	}
	
	public function testVerErroNaoExiste(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/produtos/ver/9999/string-errada');
	}
	
	public function testVerCorreto(){
		$expected = array('Produto'=>array(
			'id' => 1,
			'empresa_id' => 1,
			'tipos_produto_id' => 1,
			'descricao'=> "Produto muito legal",
			'numero_votos' => 100,
			'media_votos' => 10,
			'endereco_imagem'=>"",
			'link'=>"string-certa"
		));
		$result = $this->testAction('/produtos/ver/1/string-certa/-1', array('return'=>'vars'));
		$this->assertEquals($result['dados'], $expected);
	}
}
